package com.owc.service.admin;

import com.github.pagehelper.PageInfo;
import com.owc.common.enums.FlowTypeEnum;
import com.owc.common.enums.StatusEnum;
import com.owc.domain.BaseResult;
import com.owc.domain.dto.DetailBean;
import com.owc.domain.dto.admin.AccountFlowDTO;
import com.owc.domain.entity.AccountFlow;
import com.owc.domain.vo.admin.AccountFlowVo;
import com.owc.domain.vo.app.TokenDetailVo;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

public interface AccountFlowService {

	/**
	 * @param flowTypeEnum 流水类型 {@link com.owc.common.enums.FlowTypeEnum}
	 * @param userId       用户ID
	 * @param amount       交易金额(扣款为负数)
	 * @param address      交易地址
	 * @param tokenId      代币ID
	 * @param transferId   订单号
	 * @param txHash       交易hash
	 */
	boolean insertFlow(FlowTypeEnum flowTypeEnum, Long userId, BigDecimal amount, String address, Long tokenId, String transferId, String txHash) throws Exception;

	boolean insertFlow(FlowTypeEnum flowTypeEnum, Long userId, BigDecimal amount, String address, Long tokenId, String transferId, String txHash, StatusEnum statusEnum) throws Exception;

	/**
	 * 查询流水列表
	 */
	BaseResult<List<AccountFlowDTO>> list(AccountFlowVo accountFlowVo);

	/**
	 * 查询用户流水明细
	 * @param userId   用户ID
	 */
	PageInfo<DetailBean> getUserFlowList(Long userId, TokenDetailVo vo);

	/**
	 * 更改流水状态
	 * @param transferId  关联的订单ID
	 * @param refuse      状态
	 */
	void updateFlowStatus(String transferId, StatusEnum refuse);

	/**
	 * 更新流水信息
	 * @param accountFlow
	 */
	void updateFlowInfo(AccountFlow accountFlow);

	/**
	 * 获取流水明细
	 * @param transferId 订单ID
	 * @return 流水信息
	 */
	AccountFlow getFlowByTransferId(String transferId);

	/**
	 * 更新流水信息,通过transferId更新
	 * @param accountFlow 更新体
	 */
	void updateFlowInfoByTransferId(AccountFlow accountFlow);
}
